package io.renren.modules.generator.controller;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

import io.renren.common.exception.RRException;
import org.springframework.web.bind.annotation.*;

import io.renren.common.constant.UrlConstant;
import io.renren.common.utils.R;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;


/**
 *
 *
 * @author guijing
 * @email sunlightcs@gmail.com
 * @date 2022-02-05 22:24:18
 */
@RestController
@RequestMapping("upload")
public class FileController {
    /**
     * 上传文件
     */
    @PostMapping("/file")
    @ResponseBody
    public R upload(@RequestParam("file") MultipartFile[] multipartFiles, HttpServletRequest request) throws Exception {
        //获取文件列表第一个文件
        MultipartFile file = multipartFiles[0];
        if (file.isEmpty()) {
            throw new RRException("文件上传失败");
        }
        // 获取文件名称,包含后缀
        String originalFilename = file.getOriginalFilename();
        //避免文件名字重复
        String fileName = UUID.randomUUID().toString().replace("-", "") + originalFilename.substring(originalFilename.lastIndexOf("."));
        //下载到本地部署服务器
        String webUrl = uploadFile(file, fileName);
        //重命名后的文件名
        Map<String, Object> imgMap = new HashMap<>();
        imgMap.put("name", fileName);
        imgMap.put("url", webUrl);
        //上传文件到本地

        return R.ok().put("file", imgMap);
    }

    private String uploadFile(MultipartFile file, String fileName) throws IOException {
        String destFileName = UrlConstant.dirUrl + fileName;
        File destFile = new File(destFileName);
        // 如果没有就根据地址创建一个
        if (!destFile.exists()) {
            destFile.getParentFile().mkdirs();
        }
        // 将文件移动到目的目录
        file.transferTo(destFile);
        return UrlConstant.fileUrl + fileName;

    }

}
